// 导入gsap动画库（用于创建补间动画）
import gsap from 'gsap'

// 定义Entity基类
export default class Entity {
  constructor(mesh, resolution, option = { size: 1.5, number: 0.5 }) {
    // 保存传入的3D网格对象
    this.mesh = mesh
    
    // 配置网格的阴影属性
    mesh.castShadow = true   // 允许投射阴影
    mesh.receiveShadow = true // 允许接收阴影

    // 保存分辨率参数和相关配置选项
    this.resolution = resolution  // 可能包含屏幕/布局分辨率信息
    this.option = option          // 动画参数，默认size=1.5, number=0.5
  }

  // 位置属性的getter，代理访问mesh的位置
  get position() {
    return this.mesh.position  // 返回THREE.Vector3对象
  }

  // 根据坐标计算索引的方法（可能用于网格布局）
  getIndexByCoord() {
    const { x, y } = this.resolution  // 解构分辨率，可能代表网格列/行数
    // 计算索引公式：z坐标 * x轴分辨率 + x坐标
    // 注意：此处可能存在问题，通常3D空间索引需要考虑y坐标
    return this.position.z * x + this.position.x
  }

  // 进入动画方法
  in() {
    // 使用gsap创建缩放动画
    gsap.from(this.mesh.scale, {  // 从指定状态动画到当前状态
      duration: 1,                // 动画时长1秒
      x: 0,                       // 初始X缩放为0
      y: 0,                       // 初始Y缩放为0 
      z: 0,                       // 初始Z缩放为0
      ease: `elastic.out(${this.option.size}, ${this.option.number})`, // 弹性缓动函数
    })
  }

  // 离开动画方法（暂未实现）
  out() {}
}